Function: shr-color->hexadecimal

shr-color->hexadecimal is an autoloaded and byte-compiled function defined in shr-color.el.gz.

Signature

(shr-color->hexadecimal COLOR)

Documentation

Convert any color format to hexadecimal representation.

Like rgb() or hsl().

Source Code

;; Defined in /usr/src/emacs/lisp/net/shr-color.el.gz
(defun shr-color->hexadecimal (color)
  "Convert any color format to hexadecimal representation.
Like rgb() or hsl()."
  (when color
    (cond
     ;; Hexadecimal color: #abc or #aabbcc
     ((string-match
       "\\(#[[:xdigit:]]\\{3\\}[[:xdigit:]]\\{3\\}?\\)"
       color)
      (match-string 1 color))
     ;; rgb() or rgba() colors
     ((or (string-match
           "rgb(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*)"
           color)
          (string-match
           "rgba(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*[0-9]*\\.?[0-9]+\s*%?\s*)"
           color))
      (format "#%02X%02X%02X"
              (shr-color-relative-to-absolute (match-string-no-properties 1 color))
              (shr-color-relative-to-absolute (match-string-no-properties 2 color))
              (shr-color-relative-to-absolute (match-string-no-properties 3 color))))
     ;; hsl() or hsla() colors
     ((or (string-match
           "hsl(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*)"
           color)
          (string-match
           "hsla(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*[0-9]*\\.?[0-9]+\s*%?\s*)"
           color))
      (let ((h (/ (string-to-number (match-string-no-properties 1 color)) 360.0))
            (s (/ (string-to-number (match-string-no-properties 2 color)) 100.0))
            (l (/ (string-to-number (match-string-no-properties 3 color)) 100.0)))
        (pcase-let ((`(,r ,g ,b) (shr-color-hsl-to-rgb-fractions h s l)))
          (color-rgb-to-hex r g b 2))))
     ;; Color names
     ((cdr (assoc-string color shr-color-html-colors-alist t)))
     ;; Unrecognized color :(
     (t
      nil))))